#ifndef POLEA_H_
#define POLEA_H_

#include "Elemento.h"
#include "../fisica/PoleaFisica.h"
#include <string>

using namespace std;

class Polea: public Elemento {

private:
	Elemento* elementoSogaIzq;
	Elemento* elementoSogaDer;
	double posSogaIzqX;
	double posSogaIzqY;

	double posSogaDerX;
	double posSogaDerY;
	bool sogaIzqInicial;
	bool sogaDerInicial;

	//necesario para jointear con elementos cuando tenemos sistemas de poleas.

	Elemento* ajointearIzquierdo;
	Elemento* ajointearDerecho;


public:
	Elemento* sogaIzqUnida;
	Elemento* sogaDerUnida;
	Polea(double x, double y, double ancho, double alto, string pathImagen);
	virtual ~Polea();
	void rotar(double angulo);
	void mover(double centroX,double centroY);
	void jointearElemento(b2World* world);
	void referenciarElementos();
	bool aceptaSoga();
	void eliminarSoga(Elemento* soga);
	void agregarSogaInicial(Elemento* soga);
	void agregarSogaFinal(Elemento* soga);
	int seSuperpone(Elemento* elemento);
	void eliminarReferencias(list<Elemento*>* elementosCanvas);
	void actualizarValoresFisicos();
	pair<double,double> obtenerPuntoAnclaje();
	void dibujar(double x, double y, double ancho, double alto,SDL_Renderer* renderer);
	int haySogaIzqUnida();
	int haySogaDerUnida();
	bool esBasico();
	void activarSogaPosInicial();
	void activarSogaPosFinal();
	bool sogaEnPosInicial();
	bool sogaEnPosFinal();
	void actualizarReferencias();
	pair<Elemento*,Elemento*> obtenerExtremos();
	void setSogaInicial(Elemento*);
	void setSogaFinal(Elemento*);
	pair<double,double> obtenerPosicionSoga(int);
	pair<Elemento*,Elemento*>* getElementosSoga();

	bool obtenerExtremosConElementos(Elemento* elementoAVisitar);

};



#endif /* POLEA_H_ */
